/**
 * 1、原型
 * 1）隐式原型 实例对象.__proto__  ->  对象原型
 * 当在一个对象上找不到对象或方式时，会向隐形原型上找
 * 2）显示原型 构造函数.prototype  ->  原型对象
 * 结论： 实例对象.__proto__ == 类.prototype
 * 2.原型链
 * 当访问一个对象的属性或方式时，如果这个对象上没有该属性或方式，就向这个对象的原型上去找
 * 如果这个该对象的原型上没有，就向该原型的原型上去找。这种链式的结构就是原型链
 * 3、hasOwnProperty() 检查一个对象上是否有某属性某或方法,该方法在Object的原型对象上
 * 4、instanceof 判断一个构造函数的prototype属性是否存在于某实例对象上的原型链上
 * 
 */
class Person {
  constructor(name) {
    this.name = name
  }
  eat () {
    console.log('吃饭');
  }
}
class Student extends Person {
  constructor(name, age) {
    super(name, age)
    this.age = age
  }
  sayHi () {
    console.log('你好');
  }
}
const p1 = new Student('小王', 22)